package com.chaopei.msite_web.service.impl;

import com.chaopei.msite_web.service.ProductMQService;
import com.chaopei.msite_web.service.ProductService;
import com.chaopei.msite_web.utils.MyRedis;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

/**
 * @Author Corday 天涯
 * @Date 2022/5/17 15:07
 */
@Service
public class ProductMQServiceImpl implements ProductMQService {
    //    注入商品管理对象
    @Resource
    private ProductService productService;
    //    注入redis的对象
    @Resource
    private MyRedis myRedis;
    /**
     * mysql有更新,需直接读取mysql再进行redis缓存
     * @param msg
     * 为了防止拿到的数据有误,建议使用分布式事务管理框架seata
     */
    @JmsListener(destination = "product.msg")
    @Override
    public void getProductMQ(String msg) {
        System.out.println("拿到:"+msg);
        if("ok".equals(msg)){
            //远程获取服务中的数据,可以被熔断了,拿到是error
            // 重新读取mysql更新redis
            String json=productService.getProduts();
            //后台管理系统可以重发消息,或使用java的定时器重复加载
            //强烈建议使用分布式事务管理框架seata来保证数据的一致性
            if("error".equals(json)){
            }else{
                //重新保存到redis
                myRedis.setString("products",json);
            }
        }//if
    }
    @JmsListener(destination = "product.msg")
    @Override
    public void getMsgTest(String msg) {
        System.out.println("再拿:"+msg);
    }
}
